/**
 * 
 */
package optimization.naturalOptimization.population.individual.EA;

import optimization.naturalOptimization.population.Population;
import optimization.naturalOptimization.population.individual.Individual;

/**
 * @author Kevin Wagner
 * @param <T>
 *            type of Object component
 * @param <S>
 *            type of strategy component
 * 
 */
public abstract class EAIndividual<T, S> extends Individual<T> {

	private S strategyComponent;

	/**
	 * Creates a new
	 * 
	 * @param parentPopulation
	 */
	public EAIndividual(Population parentPopulation) {
		super(parentPopulation);
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * optimization.naturalOptimization.population.individual.Individual#performStep
	 * ()
	 */
	@Override
	public void performStep() {
		// not used
	}

	/**
	 * Sets the strategy component of the individual.
	 * 
	 * @param strategyComponent
	 *            new strategy component
	 */
	public void setStrategyComponent(S strategyComponent) {
		this.strategyComponent = strategyComponent;
	}

	/**
	 * Returns the strategy component of the individual.
	 * 
	 * @return the strategy component
	 */
	public S getStrategyComponent() {
		return strategyComponent;
	}
	
	/*
	 * (non-Javadoc)
	 * @see java.lang.Object#clone()
	 */
	@SuppressWarnings("rawtypes")
	public abstract EAIndividual clone();

}
